
package com.zsrt.day20170419.ch02;

import com.zsrt.utils.ArrayUtil;

public class CompanyDaoImpl implements CompanyDao{

	/**
	 *  查询所有工资在10000以上的程序s 判定为 ：　中级程序员
	 */
	@Override
	public Programmer[] judgeLevelBySalary(Company hualai, Programmer programmer) {

		//先得到公司程序员的数组
		Programmer[] ps = new Programmer[10];
		ps = hualai.getProgrammers();
		
		//得到工资在findSalary之上的员工
		for(Programmer p :ps){
			if(p != null){
				int salary = p.getSalary();
				
				String level = p.getLevel();
				//工资在10000以上且是初级工程师
				if(salary >=programmer.getSalary()  &&  level.equals("初级工程师")){
					level = programmer.getLevel();
					p.setLevel(level);
				}
			}
		}
		return ps;
	}
	
	
	/**
	 * 查询所有工资在10000以上的程序员
	 */
	@Override
	public Programmer[] searchBySalary(Company hualai, int findSalary) {

		//先得到公司程序员的数组
		Programmer[] ps = new Programmer[10];
		ps = hualai.getProgrammers();
		
		//得到工资在findSalary之上的员工数
		int count=0;
		for(Programmer programmer :ps){
			if(programmer != null){
				int salary = programmer.getSalary();
				if(salary >=findSalary){
					count++;
				}
			}
		}
		
		//得到结果数组
		Programmer[] jg = new Programmer[count];
		
		count =0;
		for(Programmer programmer :ps){
			if(programmer != null){
				int salary = programmer.getSalary();
				if(salary >=findSalary){
					jg[count] = programmer;
					count++;
				}
			}
		}

		return jg;
	}
	
	
	/**
	 * 添加一个新的程序员
	 */
	@Override
	public Boolean addProgram(Company hualai, Programmer programmer) {

		boolean b = true;
		//先得到公司程序员的数组
		Programmer[] ps = new Programmer[10];
		
		ps = hualai.getProgrammers();
		
		
		//看公司是否已经满员
		int count=0;
		for(int i = 0;i<ps.length;i++){
			if(ps[i] != null){
				count++;
			}
		}
		if(count<10){
			//表示没有满员
			ps[count] = programmer;
			return b;	
		}
		//如果没有满员就增加新职员
		
		return false;
	}

	
	/**
	 * 按名字删除程序员
	 */
	@Override
	public Boolean deleteProByName(Company hualai, String dname) {

		boolean b = true;
		//拿到程序员数组
		Programmer[] ps = new Programmer[10];
		ps = hualai.getProgrammers();
		
		//存放结果
		Programmer[] jg= new Programmer[10];
		
		//查询程序员是否在公司中
		for(int index =0;index<ps.length;index++){
			
			Programmer p =ps[index];
				if(p != null){
				String name = p.getName();
				
				if(dname.equals(name)){
					//找到该成员
					for(int i=0;i<ps.length;i++){
						//若在公司中就执行删除操作
						if(i<index){
							jg=ps;
						}else if(i==index){
							jg[i] = ps[i+1];
						}else{
							jg[i-1] = ps[i];
						}
					}
					System.out.println("删除以后的程序员数组为：");
					ArrayUtil.StudentEntity(jg);
					return b;
				}
				
			}
		}
		 //表示没有进入判断 没找到此人
		System.out.println("您输入的姓名有误，该程序员不在公司中...");
		return false;
		
	}


	/**
	 * 按性别删除程序员
	 */
	@Override
	public Programmer[] deleteProBySex(Company hualai, char dsex) {
		
		//拿到程序员数组
		Programmer[] ps = new Programmer[10];
		ps = hualai.getProgrammers();
		
		//有多少符合性别的程序员
		int count=0;
		for(Programmer programmer :ps){
			if(programmer !=null){
				char sex = programmer.getSex();
				if(sex == dsex){
					count++;
				}
			}
		}
		
		//存放结果
		Programmer[] jg= new Programmer[10-count];
		
		count =0;
		//根据性别删除不是dsex的程序员
		for(int index =0;index<ps.length;index++){
			Programmer programmer = ps[index];
			//判断ps数组的值不为null时 进行操作
			if(programmer  !=null){
				char sex = programmer.getSex();
				//不相等时加入结果数组
				if(sex != dsex){
					jg[count] = programmer;
					count++;
				}
			}
		}
			
		return jg;
	}


	/**
	 * 把所有的女程序员的工资增加1000块
	 */
	@Override
	public Programmer[] updateSalaryBySex(Company hualai, char dsex, int addNum) {

		Programmer[] ps = new Programmer[10];
		ps = hualai.getProgrammers();
		
		//查询得到女程序员
		for(Programmer programmer :ps){
			if(programmer != null){
				char sex = programmer.getSex();
				//性别正确
				if(sex == dsex){
					//工资上调 addNum
					int salary = programmer.getSalary();
					salary = salary +addNum;
					programmer.setSalary(salary);
				}
			}
		}
		
		return ps;
	}
	
}
